package com.yaorange.nongjt.service.impl;

import java.util.ArrayList;
import java.util.List;
import com.yaorange.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yaorange.nongjt.mapper.NjtAreaMapper;
import com.yaorange.nongjt.domain.NjtArea;
import com.yaorange.nongjt.service.INjtAreaService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

/**
 * 地区层级关系Service业务层处理
 * 
 * @author juheng
 * @date 2025-02-26
 */
@Service
public class NjtAreaServiceImpl implements INjtAreaService 
{
    @Autowired
    private NjtAreaMapper njtAreaMapper;

    /**
     * 查询地区层级关系
     * 
     * @param id 地区层级关系主键
     * @return 地区层级关系
     */
    @Override
    public NjtArea selectNjtAreaById(String id)
    {
        return njtAreaMapper.selectNjtAreaById(id);
    }

    /**
     * 查询地区层级关系列表
     * 
     * @param njtArea 地区层级关系
     * @return 地区层级关系
     */
    @Override
    public List<NjtArea> selectNjtAreaList(NjtArea njtArea)
    {
        return njtAreaMapper.selectNjtAreaList(njtArea);
    }

    /**
     * 新增地区层级关系
     * 
     * @param njtArea 地区层级关系
     * @return 结果
     */
    @Override
    public int insertNjtArea(NjtArea njtArea)
    {
        njtArea.setCreateTime(DateUtils.getNowDate());
        return njtAreaMapper.insertNjtArea(njtArea);
    }

    /**
     * 修改地区层级关系
     * 
     * @param njtArea 地区层级关系
     * @return 结果
     */
    @Override
    public int updateNjtArea(NjtArea njtArea)
    {
        njtArea.setUpdateTime(DateUtils.getNowDate());
        return njtAreaMapper.updateNjtArea(njtArea);
    }

    /**
     * 批量删除地区层级关系
     * 
     * @param ids 需要删除的地区层级关系主键
     * @return 结果
     */
    @Override
    public int deleteNjtAreaByIds(String[] ids)
    {
        return njtAreaMapper.deleteNjtAreaByIds(ids);
    }

    /**
     * 删除地区层级关系信息
     * 
     * @param id 地区层级关系主键
     * @return 结果
     */
    @Override
    public int deleteNjtAreaById(String id)
    {
        return njtAreaMapper.deleteNjtAreaById(id);
    }

    /**
     * 根据父节点code获取子节点，为null时返回所有根节点
     *
     * @param parentCode
     * @return
     */
    @Override
    public List<NjtArea> getByParentCode(String parentCode) {
        return njtAreaMapper.selectByParentCode(parentCode);
    }

    /**
     * 获取所有根节点
     *
     * @param isAll 是否查询所有，true包括禁用和可用状态，false 查询可用状态
     * @return
     */
    @Override
    public List<NjtArea> getListRoot(boolean isAll) {
        List<NjtArea> areaList = njtAreaMapper.selectListRoot(isAll);
        // 设置是否有子节点
        for (NjtArea area : areaList) {
            area.setHasChildren();
        }
        return areaList;
    }

    /**
     * 根据父节点code获取子节点
     *
     * @param parentCode 父编码
     * @param isAll      是否查询所有，true包括禁用和可用状态，false 查询可用状态
     * @return
     */
    @Override
    public List<NjtArea> getChildrenByParentCode(String parentCode, boolean isAll) {
        List<NjtArea> areaList = njtAreaMapper.selectChildrenByParentCode(parentCode, isAll);
        // 设置是否有子节点
        for (NjtArea area : areaList) {
            area.setHasChildren();
        }
        return areaList;
    }

    @Override
    @Transactional(readOnly = true)
    public List<List<NjtArea>> getDefaultListRoot() {
        List<List<NjtArea>> columns = new ArrayList<>(3);
        //获取省列表
        List<NjtArea> provenceList = this.getListRoot(false);
        if (CollectionUtils.isEmpty(provenceList)){
            return columns;
        }
        columns.add(provenceList);
        //采用递归方式获取第一个省的市列表，以及第一个市的区列表
        List<NjtArea> currentList = provenceList;
        for(int i = 0 ; i < 2 ; i++){
            List<NjtArea> tempList = this.getChildrenByParentCode(currentList.get(0).getCode(), false);
            if(CollectionUtils.isEmpty(tempList)) {
                break;
            }
            columns.add(tempList);
            currentList = tempList;
        }
        return columns;
    }
}
